home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / madwifi / net80211 / _ieee80211.h next >
C/C++ Source or Header  |  2006-05-11  |  10KB  |  244 lines

  1. /*-
  2.  * Copyright (c) 2001 Atsushi Onoe
  3.  * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
  4.  * All rights reserved.
  5.  *
  6.  * Redistribution and use in source and binary forms, with or without
  7.  * modification, are permitted provided that the following conditions
  8.  * are met:
  9.  * 1. Redistributions of source code must retain the above copyright
  10.  *    notice, this list of conditions and the following disclaimer.
  11.  * 2. Redistributions in binary form must reproduce the above copyright
  12.  *    notice, this list of conditions and the following disclaimer in the
  13.  *    documentation and/or other materials provided with the distribution.
  14.  * 3. The name of the author may not be used to endorse or promote products
  15.  *    derived from this software without specific prior written permission.
  16.  *
  17.  * Alternatively, this software may be distributed under the terms of the
  18.  * GNU General Public License ("GPL") version 2 as published by the Free
  19.  * Software Foundation.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
  22.  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  23.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  24.  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  25.  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  26.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  27.  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  28.  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
  30.  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31.  *
  32.  * $Id: _ieee80211.h 1441 2006-02-06 16:03:21Z mrenzmann $
  33.  */
  34. #ifndef _NET80211__IEEE80211_H_
  35. #define _NET80211__IEEE80211_H_
  36.  
  37. enum ieee80211_phytype {
  38.     IEEE80211_T_DS,            /* direct sequence spread spectrum */
  39.     IEEE80211_T_FH,            /* frequency hopping */
  40.     IEEE80211_T_OFDM,        /* frequency division multiplexing */
  41.     IEEE80211_T_TURBO,        /* high rate OFDM, aka turbo mode */
  42. };
  43. #define    IEEE80211_T_CCK    IEEE80211_T_DS    /* more common nomenclature */
  44.  
  45. /* XXX not really a mode; there are really multiple PHY's */
  46. enum ieee80211_phymode {
  47.     IEEE80211_MODE_AUTO    = 0,    /* autoselect */
  48.     IEEE80211_MODE_11A    = 1,    /* 5GHz, OFDM */
  49.     IEEE80211_MODE_11B    = 2,    /* 2GHz, CCK */
  50.     IEEE80211_MODE_11G    = 3,    /* 2GHz, OFDM */
  51.     IEEE80211_MODE_FH    = 4,    /* 2GHz, GFSK */
  52.     IEEE80211_MODE_TURBO_A    = 5,    /* 5GHz, OFDM, 2x clock dynamic turbo */
  53.     IEEE80211_MODE_TURBO_G    = 6,    /* 2GHz, OFDM, 2x clock  dynamic turbo*/
  54. };
  55. #define    IEEE80211_MODE_MAX    (IEEE80211_MODE_TURBO_G+1)
  56.  
  57. enum ieee80211_opmode {
  58.     IEEE80211_M_STA        = 1,    /* infrastructure station */
  59.     IEEE80211_M_IBSS     = 0,    /* IBSS (adhoc) station */
  60.     IEEE80211_M_AHDEMO    = 3,    /* Old lucent compatible adhoc demo */
  61.     IEEE80211_M_HOSTAP    = 6,    /* Software Access Point */
  62.     IEEE80211_M_MONITOR    = 8,    /* Monitor mode */
  63.     IEEE80211_M_WDS        = 2    /* WDS link */
  64. };
  65.  
  66. /*
  67.  * 802.11g protection mode.
  68.  */
  69. enum ieee80211_protmode {
  70.     IEEE80211_PROT_NONE    = 0,    /* no protection */
  71.     IEEE80211_PROT_CTSONLY    = 1,    /* CTS to self */
  72.     IEEE80211_PROT_RTSCTS    = 2,    /* RTS-CTS */
  73. };
  74.  
  75. /*
  76.  * Authentication mode.
  77.  */
  78. enum ieee80211_authmode {
  79.     IEEE80211_AUTH_NONE    = 0,
  80.     IEEE80211_AUTH_OPEN    = 1,    /* open */
  81.     IEEE80211_AUTH_SHARED    = 2,    /* shared-key */
  82.     IEEE80211_AUTH_8021X    = 3,    /* 802.1x */
  83.     IEEE80211_AUTH_AUTO    = 4,    /* auto-select/accept */
  84.     /* NB: these are used only for ioctls */
  85.     IEEE80211_AUTH_WPA    = 5,    /* WPA/RSN w/ 802.1x/PSK */
  86. };
  87.  
  88. /*
  89.  * Roaming mode is effectively who controls the operation
  90.  * of the 802.11 state machine when operating as a station.
  91.  * State transitions are controlled either by the driver
  92.  * (typically when management frames are processed by the
  93.  * hardware/firmware), the host (auto/normal operation of
  94.  * the 802.11 layer), or explicitly through ioctl requests
  95.  * when applications like wpa_supplicant want control.
  96.  */
  97. enum ieee80211_roamingmode {
  98.     IEEE80211_ROAMING_DEVICE= 0,    /* driver/hardware control */
  99.     IEEE80211_ROAMING_AUTO    = 1,    /* 802.11 layer control */
  100.     IEEE80211_ROAMING_MANUAL= 2,    /* application control */
  101. };
  102.  
  103. /*
  104.  * Scanning mode controls station scanning work; this is
  105.  * used only when roaming mode permits the host to select
  106.  * the bss to join/channel to use.
  107.  */
  108. enum ieee80211_scanmode {
  109.     IEEE80211_SCAN_DEVICE    = 0,    /* driver/hardware control */
  110.     IEEE80211_SCAN_BEST    = 1,    /* 802.11 layer selects best */
  111.     IEEE80211_SCAN_FIRST    = 2,    /* take first suitable candidate */
  112. };
  113.  
  114. /*
  115.  * Channels are specified by frequency and attributes.
  116.  */
  117. struct ieee80211_channel {
  118.     u_int16_t ic_freq;    /* setting in Mhz */
  119.     u_int16_t ic_flags;    /* see below */
  120.     u_int8_t ic_ieee;    /* IEEE channel number */
  121.     int8_t ic_maxregpower;    /* maximum regulatory tx power in dBm */
  122.     int8_t ic_maxpower;    /* maximum tx power in dBm */
  123.     int8_t ic_minpower;    /* minimum tx power in dBm */
  124. };
  125.  
  126. #define    IEEE80211_CHAN_MAX    255
  127. #define    IEEE80211_CHAN_BYTES    32    /* howmany(IEEE80211_CHAN_MAX, NBBY) */
  128. #define    IEEE80211_CHAN_ANY    0xffff    /* token for ``any channel'' */
  129. #define    IEEE80211_CHAN_ANYC     ((struct ieee80211_channel *) IEEE80211_CHAN_ANY)
  130.  
  131. #define    IEEE80211_RADAR_11HCOUNT    1
  132. #define    IEEE80211_RADAR_TEST_MUTE_CHAN    36    /* Move to channel 36 for mute test */
  133.  
  134. /* bits 0-3 are for private use by drivers */
  135. /* channel attributes */
  136. #define    IEEE80211_CHAN_TURBO    0x0010    /* Turbo channel */
  137. #define    IEEE80211_CHAN_CCK    0x0020    /* CCK channel */
  138. #define    IEEE80211_CHAN_OFDM    0x0040    /* OFDM channel */
  139. #define    IEEE80211_CHAN_2GHZ    0x0080    /* 2 GHz spectrum channel. */
  140. #define    IEEE80211_CHAN_5GHZ    0x0100    /* 5 GHz spectrum channel */
  141. #define    IEEE80211_CHAN_PASSIVE    0x0200    /* Only passive scan allowed */
  142. #define    IEEE80211_CHAN_DYN    0x0400    /* Dynamic CCK-OFDM channel */
  143. #define    IEEE80211_CHAN_GFSK    0x0800    /* GFSK channel (FHSS PHY) */
  144. #define IEEE80211_CHAN_RADAR    0x1000    /* Radar found on channel */
  145. #define    IEEE80211_CHAN_STURBO    0x2000    /* 11a static turbo channel only */
  146. #define    IEEE80211_CHAN_HALF    0x4000    /* Half rate channel */
  147. #define    IEEE80211_CHAN_QUARTER    0x8000    /* Quarter rate channel */
  148.  
  149. /*
  150.  * Useful combinations of channel characteristics.
  151.  */
  152. #define    IEEE80211_CHAN_FHSS \
  153.     (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_GFSK)
  154. #define    IEEE80211_CHAN_A \
  155.     (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM)
  156. #define    IEEE80211_CHAN_B \
  157.     (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_CCK)
  158. #define    IEEE80211_CHAN_PUREG \
  159.     (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM)
  160. #define    IEEE80211_CHAN_G \
  161.     (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_DYN)
  162. #define IEEE80211_CHAN_108A \
  163.     (IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
  164. #define    IEEE80211_CHAN_108G \
  165.     (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_TURBO)
  166. #define    IEEE80211_CHAN_ST \
  167.     (IEEE80211_CHAN_108A | IEEE80211_CHAN_STURBO)
  168.  
  169. #define    IEEE80211_CHAN_ALL \
  170.     (IEEE80211_CHAN_2GHZ | IEEE80211_CHAN_5GHZ | IEEE80211_CHAN_GFSK | \
  171.      IEEE80211_CHAN_CCK | IEEE80211_CHAN_OFDM | IEEE80211_CHAN_DYN)
  172. #define    IEEE80211_CHAN_ALLTURBO \
  173.     (IEEE80211_CHAN_ALL | IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO)
  174.  
  175. #define    IEEE80211_IS_CHAN_FHSS(_c) \
  176.     (((_c)->ic_flags & IEEE80211_CHAN_FHSS) == IEEE80211_CHAN_FHSS)
  177. #define    IEEE80211_IS_CHAN_A(_c) \
  178.     (((_c)->ic_flags & IEEE80211_CHAN_A) == IEEE80211_CHAN_A)
  179. #define    IEEE80211_IS_CHAN_B(_c) \
  180.     (((_c)->ic_flags & IEEE80211_CHAN_B) == IEEE80211_CHAN_B)
  181. #define    IEEE80211_IS_CHAN_PUREG(_c) \
  182.     (((_c)->ic_flags & IEEE80211_CHAN_PUREG) == IEEE80211_CHAN_PUREG)
  183. #define    IEEE80211_IS_CHAN_G(_c) \
  184.     (((_c)->ic_flags & IEEE80211_CHAN_G) == IEEE80211_CHAN_G)
  185. #define    IEEE80211_IS_CHAN_ANYG(_c) \
  186.     (IEEE80211_IS_CHAN_PUREG(_c) || IEEE80211_IS_CHAN_G(_c))
  187. #define    IEEE80211_IS_CHAN_ST(_c) \
  188.     (((_c)->ic_flags & IEEE80211_CHAN_ST) == IEEE80211_CHAN_ST)
  189. #define    IEEE80211_IS_CHAN_108A(_c) \
  190.     (((_c)->ic_flags & IEEE80211_CHAN_108A) == IEEE80211_CHAN_108A)
  191. #define    IEEE80211_IS_CHAN_108G(_c) \
  192.     (((_c)->ic_flags & IEEE80211_CHAN_108G) == IEEE80211_CHAN_108G)
  193.  
  194. #define    IEEE80211_IS_CHAN_2GHZ(_c) \
  195.     (((_c)->ic_flags & IEEE80211_CHAN_2GHZ) != 0)
  196. #define    IEEE80211_IS_CHAN_5GHZ(_c) \
  197.     (((_c)->ic_flags & IEEE80211_CHAN_5GHZ) != 0)
  198. #define    IEEE80211_IS_CHAN_OFDM(_c) \
  199.     (((_c)->ic_flags & IEEE80211_CHAN_OFDM) != 0)
  200. #define    IEEE80211_IS_CHAN_CCK(_c) \
  201.     (((_c)->ic_flags & IEEE80211_CHAN_CCK) != 0)
  202. #define    IEEE80211_IS_CHAN_GFSK(_c) \
  203.     (((_c)->ic_flags & IEEE80211_CHAN_GFSK) != 0)
  204. #define    IEEE80211_IS_CHAN_TURBO(_c) \
  205.     (((_c)->ic_flags & IEEE80211_CHAN_TURBO) != 0)
  206. #define    IEEE80211_IS_CHAN_STURBO(_c) \
  207.     (((_c)->ic_flags & IEEE80211_CHAN_STURBO) != 0)
  208. #define    IEEE80211_IS_CHAN_DTURBO(_c) \
  209.     (((_c)->ic_flags & \
  210.     (IEEE80211_CHAN_TURBO | IEEE80211_CHAN_STURBO)) == IEEE80211_CHAN_TURBO)
  211. #define    IEEE80211_IS_CHAN_HALF(_c) \
  212.     (((_c)->ic_flags & IEEE80211_CHAN_HALF) != 0)
  213. #define    IEEE80211_IS_CHAN_QUARTER(_c) \
  214.     (((_c)->ic_flags & IEEE80211_CHAN_QUARTER) != 0)
  215.  
  216. /* ni_chan encoding for FH phy */
  217. #define    IEEE80211_FH_CHANMOD        80
  218. #define    IEEE80211_FH_CHAN(set,pat)    (((set) - 1) * IEEE80211_FH_CHANMOD + (pat))
  219. #define    IEEE80211_FH_CHANSET(chan)    ((chan) / IEEE80211_FH_CHANMOD + 1)
  220. #define    IEEE80211_FH_CHANPAT(chan)    ((chan) % IEEE80211_FH_CHANMOD)
  221.  
  222. /*
  223.  * 802.11 rate set.
  224.  */
  225. #define    IEEE80211_RATE_SIZE    8        /* 802.11 standard */
  226. #define    IEEE80211_RATE_MAXSIZE    15        /* max rates we'll handle */
  227.  
  228. struct ieee80211_rateset {
  229.     u_int8_t rs_nrates;
  230.     u_int8_t rs_rates[IEEE80211_RATE_MAXSIZE];
  231. };
  232.  
  233. struct ieee80211_roam {
  234.     int8_t rssi11a;        /* rssi thresh for 11a bss */
  235.     int8_t rssi11b;        /* for 11g sta in 11b bss */
  236.     int8_t rssi11bOnly;    /* for 11b sta */
  237.     u_int8_t pad1;
  238.     u_int8_t rate11a;    /* rate thresh for 11a bss */
  239.     u_int8_t rate11b;    /* for 11g sta in 11b bss */
  240.     u_int8_t rate11bOnly;    /* for 11b sta */
  241.     u_int8_t pad2;
  242. };
  243. #endif /* _NET80211__IEEE80211_H_ */
  244.